package itheima05;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

/**
 * @author HJX
 * @version 3.0
 */
public class IOUtils {
    /**
     * 构造方法private,修饰不能创建对象
     */
    private IOUtils(){
    }
    /**
     *  删除给定的文件夹dir(包含里面的所有的内容)
     *  @param dir 调用此方法传递文件夹(里面可以包含子文件夹和其它文件)
     *  @return boolean 返回true 删除成功,false 删除失败
     */
    public static boolean removeDir(File dir) {
        //获取dir目录中的内容
        File[] files = dir.listFiles();
        if(files==null || files.length==0) {
            //如果dir中没内容,直接删除
            return dir.delete();
        }
        for (File file : files) {
            //如果是文件
            if(file.isFile()) {
                //删除该文件
                file.delete();
            }
            //如果是目录
            if(file.isDirectory()) {
                //递归调用
                removeDir(file);
            }
        }
        //当前文件夹中的所有文件都删除后,要把当前文件夹删除
        return dir.delete();
    }
    /**
     *  获取文件夹的大小
     *  @param dir 调用此方法传递文件夹(里面可以包含子文件夹和其它文件)
     *  @return long 返回文件夹的字节数(里面可以包含子文件夹和其它文件)
     */
    public static long getLength(File dir) {
        //定义变量,记录字节数
        long length = 0;
        //获取dir目录中的内容
        File[] files = dir.listFiles();
        if (files == null || files.length ==0) {
            //文件夹中没内容直接返回0
            return length;
        }
        //遍历
        for (File file : files) {
            //如果是文件
            if(file.isFile()) {
                //把当前文件的大小累加到变量length中
                length += file.length();
            }
            //如果是目录
            if(file.isDirectory()) {
                //把该目录的大小,及该目录中之前计算的所有文件的大小累加到一起
                length += getLength(file);
            }
        }
        //返回当前目录的大小
        return length;
    }
    /**
     * 将文件夹中的所有avi结尾的文件名,写入到文件中
     * @param srcDir 调用此方法传递文件夹(里面可以包含子文件夹和其它文件)
     * @param path  用来保存文件名的文件
     * @throws IOException 抛出编译时期异常
     */
    public static void listDirFilesName2File(File srcDir,String path) throws IOException {
        File destFile = new File(path);
        if (!destFile.exists()) {
            destFile.createNewFile();
        }
        BufferedWriter bw = new BufferedWriter(new FileWriter(destFile));
        File[] files = srcDir.listFiles();
        if (files == null) {
            return;
        }
        for(File file : files) {
            String fileName = file.getName();
            if(file.isFile()&&fileName.toLowerCase().endsWith(".avi")) {
                bw.write(fileName.split("\\.")[0]);
                bw.newLine();
            } else if(file.isDirectory()) {
                listDirFilesName2File(file,path);
            }
        }
        bw.close();
    }
    /**
     * 键盘录入获取一个文件夹路径
     * @return File 返回一个文件夹对象
     */

    public static File getDir() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个文件夹路径:");
        while (true) {
            //获取当前输入的字符串
            String strDir = sc.nextLine();
            //将获取的字符串封装成File对象
            File dir = new File(strDir);
            //如果路径不存在
            if (!dir.exists()) {
                //提示重新录入
                System.out.println("您输入的路径不存在,请重新输入: ");
            } else {
                //如果存在,且是目录
                if (dir.isDirectory()) {
                    //返回目录(文件路径)
                    return dir;
                }
                //如果存在,不是目录,提示重新输入
                System.out.println("您输入的不是文件夹路径,请重新输入: ");
            }
        }
    }
}
